//package com.ss.project.xia17user.config.security.auth2;
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.data.redis.connection.RedisConnectionFactory;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
//import org.springframework.data.redis.serializer.StringRedisSerializer;
//import org.springframework.security.oauth2.core.OAuth2TokenType;
//import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
//import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationService;
//import org.springframework.stereotype.Service;
//import java.util.concurrent.TimeUnit;
//
///**
// * 使用Redis来存储Code
// * 在这里说明一下，0.0.1版本的Authorization Server只调用了一次 findByToken 方法，是在使用code获取accessToken的时候
// * 所以我们只需要保存 AUTHORIZATION_CODE 即可 ， 尽管生成access_token时也调用了 save方法
// * AUTHORIZATION_CODE 只保存一次且时间有效期只有100秒 ，第一次读取的时候会将其删除
// * @author xia17
// * @since 2020/9/15 17:47
// */
//@Slf4j
//@Service
//public class RedisOauth2AuthorizationServiceImpl implements OAuth2AuthorizationService {
//
//    private final RedisTemplate<String,Object> redisTemplate;
//
//    public RedisOauth2AuthorizationServiceImpl(RedisConnectionFactory redisConnectionFactory) {
//        this.redisTemplate = new RedisTemplate<>();
//        // 实例化一个redisTemplate
//        this.redisTemplate.setConnectionFactory(redisConnectionFactory);
//        this.redisTemplate.setKeySerializer(new StringRedisSerializer());
//        // value 序列化采用JdkSerializationRedisSerializer
//        this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
//        this.redisTemplate.afterPropertiesSet();
//    }
//
//    /** auth2的redis key */
//    private static final String REDIS_KEY_BASE = "authorization_";
//
//
//    /**
//     * 存入Redis
//     * @param authorization /
//     */
//    @Override
//    public void save(OAuth2Authorization authorization) {
//        String idKey = REDIS_KEY_BASE + authorization.getId();
//    }
//
//    @Override
//    public void remove(OAuth2Authorization authorization) {
//
//    }
//
//    @Override
//    public OAuth2Authorization findById(String id) {
//        return null;
//    }
//
//
//    /**
//     * 获取凭证
//     * @param token /
//     * @param tokenType /
//     * @return /
//     */
//    @Override
//    public OAuth2Authorization findByToken(String token, OAuth2TokenType tokenType) {
//        log.info("验证token");
//        String key = generateRedisKey(token, tokenType);
//        Object authorization = redisTemplate.opsForValue().get(key);
//        if (authorization == null){
//            return null;
//        }else {
//            if (TokenType.AUTHORIZATION_CODE == tokenType){
//                // 如果是code 需要删除code code只能使用一次
//                redisTemplate.delete(key);
//            }
//            log.info("成功获取oauth2授权信息");
//            return (OAuth2Authorization) authorization;
//        }
//    }
//
//
//}
